//package com.surfilter.mq.validate.website.impl;
//
//import com.google.gson.reflect.TypeToken;
//import com.surfilter.funds.task.constant.DomainState;
//import com.surfilter.funds.task.entity.*;
//import com.surfilter.funds.task.job.StatCountBaseJob;
//import com.surfilter.funds.task.manage.redis.OprateRedisService;
//import com.surfilter.funds.task.manage.utils.JsonUtils;
//import com.surfilter.funds.task.service.classifier.WriteClassifierInfoToDB;
//import com.surfilter.funds.task.service.classifier.keyword.KeywordConfig;
//import com.surfilter.funds.task.service.opratedata.OprateDataService;
//import com.surfilter.funds.task.service.website.WebSiteStatus;
//import com.surfilter.funds.task.service.website.WebSiteStatusService;
//import com.surfilter.funds.task.service.wzbaxx.WebSiteRecordInfoService;
//import com.surfilter.funds.task.syncdata.utils.StringParseUtils;
//import com.surfilter.funds.task.util.*;
//import com.surfilter.funds.task.validatelive.OuterNetValidate;
//import org.apache.commons.io.FileUtils;
//import org.apache.commons.lang.StringUtils;
//import org.jsoup.Jsoup;
//import org.jsoup.nodes.Document;
//import org.jsoup.nodes.Element;
//import org.jsoup.select.Elements;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//
//import java.io.File;
//import java.io.IOException;
//import java.io.UnsupportedEncodingException;
//import java.text.DecimalFormat;
//import java.util.*;
//import java.util.regex.Matcher;
//import java.util.regex.Pattern;
//
//public class WebSiteStatusServiceImpl extends StatCountBaseJob implements WebSiteStatusService {
//
//	private static Logger logger = LoggerFactory.getLogger(WebSiteStatusServiceImpl.class);
//
//	private final static int inwordcap = PropertiesUtils.getIntValue("classifier.inword.capnum.fjr", 20);
//
//	@Autowired
//	private OprateRedisService redis;
//
//	private WebSiteRecordInfoService webSiteRecordInfoService;
//
//	private OprateDataService oprateDataService;
//
//	private WriteClassifierInfoToDB dmbInfo;
//
//	private static final String encoding = "utf-8";
//
//	private static final List<String> exludeCompanys = new ArrayList<String>();
//
//	private static final String webValidateKey = PropertiesUtils.getStringValue("web_validate_key", "web_validate");
//
//	private static final String ip_cache = PropertiesUtils.getStringValue("redis_ip_cache_key", "ip_cache");
//
//	private static final String inLinks_key = PropertiesUtils.getStringValue("inLinks_key", "inLinks_key");
//
//	private static final String outLinks_key = PropertiesUtils.getStringValue("outLinks_key", "outLinks_key");
//
//	private static final String snapshot_path = PropertiesUtils.getStringValue("qrjrwz.snapshot_path",
//			"/datanfs/qrjrwz/snapshot/");
//
//	private static final String snapshot_path_history = PropertiesUtils.getStringValue("qrjrwz.snapshot_path_history",
//			"/datanfs/qrjrwz/oldsnapshot/");
//
//	private static final String image_path = PropertiesUtils.getStringValue("qrjrwz.image_path",
//			"/datanfs/qrjrwz/image/");
//
//	private static final String image_path_history = PropertiesUtils.getStringValue("qrjrwz.image_path_history",
//			"/datanfs/qrjrwz/oldimage/");
//
//	private static final int sjwhDayNum = PropertiesUtils.getIntValue("web.site.sjwh.day.num", 3);
//
//	private static final String webValidateKey2 = PropertiesUtils.getStringValue("web_validate_key2", "web_validate2");
//
//	private static final int html_size = 30;
//
//	private static final int html_length = 1000;
//
//	private static final int html_depth = 3;
//
//	static {
//		exludeCompanys.add("回环地址");
//		exludeCompanys.add("IANA");
//		exludeCompanys.add("IANA保留地址");
//		exludeCompanys.add("环回地址");
//		exludeCompanys.add("保留地址");
//		exludeCompanys.add("局域网地址");
//		exludeCompanys.add("本地局域网");
//	}
//
//	@Override
//	public WebSiteStatus getWebSiteStatus(WebsiteInfo siteInfo) {
//		WebSiteStatus webSiteStatus = new WebSiteStatus();
//		WebCrawlUtils webCrawlUtils = new WebCrawlUtils();
//		try {
//			// 保存快照之前，先调用该方法获取昨日快照，保存到lastSnapShot属性中
//			saveLastSnapShot(siteInfo, webSiteStatus);
//
//			int wzid = siteInfo.getWzid();
//			String ym = siteInfo.getYm();
//			logger.info("测试----进入到获取网站状态..域名{},{}", ym, siteInfo);
//			boolean initDriverByPools = webCrawlUtils.initDriverByPools();
//			if (!initDriverByPools) {
//				logger.info("没有可用的phantomjs....域名:{}", ym);
//				return null;
//			}
//			String wwsywz = siteInfo.getWwsywz();
//			if (StringUtils.isEmpty(wwsywz) || StringUtils.isEmpty(ym))
//				return null;
//			webSiteStatus.setWzid(wzid);
//			String domain = HttpUtil.getDomainByUrlWWW(wwsywz);
//			String ip = IpUtils.getIP(domain);
//			if (StringUtils.isEmpty(ip))
//				webSiteStatus.setPingStatus(false);
//			else {
//				webSiteStatus.setPingStatus(true);
//				webSiteStatus.setIp(ip);
//			}
//			long start = System.currentTimeMillis();
//			boolean openWebPage = webCrawlUtils.openWebPage(wwsywz);
//			long end = System.currentTimeMillis();
//			logger.info("打开网站所需时间以及是否正常打开状态:{},{},{}", ym, end - start, openWebPage);
////			if (!openWebPage)
////				return null;
//			webCrawlUtils.ajaxWait(5000);
//			String currentUrl = webCrawlUtils.getCurrentUrl();
//			if (StringUtils.isEmpty(currentUrl) || "about:blank".equalsIgnoreCase(currentUrl.trim())) {
//				webSiteStatus.setIsOpen(false);
//			} else {
//				webSiteStatus.setCurrentUrl(currentUrl);
//				webSiteStatus.setIsOpen(true);
//				//获取网站内外链
////				Map<String, List<String>> links = GainLinksUtil.getLinks(currentUrl, webCrawlUtils);
////				List<String> inLinks = links.get("inLinks");
////				List<String> outLinks = links.get("outLinks");
////				if (inLinks != null) {
////					webSiteStatus.setInlink(inLinks);
////					 String inLinksJson = JsonUtils.getJsonStringByObject(inLinks);
////					 redis.addValue(inLinks_key, ym, inLinksJson);
////				}
////				if (outLinks != null) {
////					webSiteStatus.setOutlink(outLinks);
////					 String outLinksJson = JsonUtils.getJsonStringByObject(outLinks);
////					 redis.addValue(outLinks_key, ym, outLinksJson); //入Redis中
////				}
//
//				List<String> list = webCrawlUtils.getPageSourceAndFrame(ym);
//				String stringByList = CommonStringUtils.getStringByList(list);
//				saveSnapshot(stringByList, siteInfo, webCrawlUtils); // 保存快照
//				webSiteStatus.setSnapshot(list);
//			}
//		} catch (Exception e) {
//			e.printStackTrace();
//			logger.error("测试--------获取网站状态报错。。{},{}", e,siteInfo.getWzmc());
//		} finally {
//			webCrawlUtils.recoveryDriver();
//		}
//		return webSiteStatus;
//	}
//
//	@Override
//	public void judgeSFBA(WebsiteInfo siteInfo) {
//		if (siteInfo == null)
//			return;
//		try {
//			String domainName = siteInfo.getYm();// 域名
//			String tomDomain = WriteClassifierInfoToDB.getTomDomain(domainName);// 获取顶级域名
//			String icpRedisAll = PropertiesUtils.getStringValue("icp.redis.all.key","icp_redis_all");
//			if (!StringUtils.isEmpty(tomDomain)) {
//				String lowerDomain = tomDomain.toLowerCase();
//				boolean exist = redis.exist(icpRedisAll, lowerDomain);
//				if (exist) {
//					siteInfo.setSfba(1);
//					logger.info("测试--判断备案表中是否要插入此条数据:{}", siteInfo);
//					saveToWebSiteInfo(icpRedisAll, siteInfo); // 是备案的将在备案表中插入此条数据
//				} else {
//					siteInfo.setSfba(0);
//					deleteDataWebsiteRecordInfo(siteInfo); // 删除备案表中此条数据
//				}
//			}
//		} catch (Exception e) {
//			logger.error("测试 --是否备案巡查异常：", e);
//		}
//
//	}
//
//	@SuppressWarnings("unchecked")
//	@Override
//	public void JudgeDataOutsideOrNot(WebSiteStatus webSiteStatus, WebsiteInfo siteInfo) {
//		try {
//			if (siteInfo == null || webSiteStatus == null) return;
//			logger.info("测试 --- 进入验证数据是否在境外...网站id为:{}", siteInfo.getWzid());
//			logger.info("测试---SFJW方法开始执行时，网站状态：{}  " + siteInfo.toString());
//			// 从传入的WebSiteStatus对象中获得的ip信息
//			String ip = webSiteStatus.getIp();
//			siteInfo = valiIpSfjw(ip, siteInfo);
//			if (siteInfo.getSfjw() != 1 || exludeCompanys.contains(siteInfo.getGjmc())) {
//				deleteWzycts(siteInfo);
//			}
//			String mapkey = String.valueOf(siteInfo.getWzid()); // 当前网站的id
//			List<String> relist = new ArrayList<String>(); // 要存入redis缓存中的ip信息集合
//			List<WebsiteInfo> valiList = new ArrayList<WebsiteInfo>();
//			// 判断是否存在，不存在则创建
//			if (!redis.exist(ip_cache, mapkey)) {
//				if (ip != null && !Objects.equals("", ip)) {
//					List<String> list = new ArrayList<String>();
//					// 把当前网站的ip放入list集合中
//					list.add(ip);
//					redis.addValue(ip_cache, mapkey, JsonUtils.getJsonStringByObject(list));
//				}
//			} else {
//				// 从redis缓存中获取ip信息集合 key为固定字符串，mapkey为当前url listVal为list集合
//				String listVal = redis.getValue(ip_cache, mapkey); // 获取的list集合的json字符串
//				// logger.info("测试 --- 网站id："+ mapkey + "在Redis中缓存的IP信息...{}.", listVal);
//				if (listVal != null && !Objects.equals("", listVal)) {
//					relist = (ArrayList<String>) JsonUtils.getObjectByJsonString(listVal, ArrayList.class);
//					// 判断网站是否为境外网站，如果不是，则从验证缓存的ip信息
//					if (siteInfo.getSfjw() != 1) {
//						// 验证缓存中的ip信息集合
//						for (int i = 0; i < relist.size(); i++) {
//							String ip_cache = relist.get(i);
//							WebsiteInfo websiteInfo = new WebsiteInfo();
//							websiteInfo.setFxip(ip_cache);
//							WebsiteInfo tmp = valiIpSfjw(ip_cache, websiteInfo);
//							valiList.add(tmp);
//						}
//						// 从最新的ip缓存开始判断，如果为境外网站并可以ping通
//						if (OuterNetValidate.isAvaliable()) {
//							for (int i = valiList.size() - 1; i >= 0; i--) {
//								if (valiList.get(i).getSfjw() == 1) {
//									String gjmc = valiList.get(i).getGjmc().trim();
//									if (gjmc != null && !gjmc.equalsIgnoreCase("") && !exludeCompanys.contains(gjmc)
//											&& !gjmc.equalsIgnoreCase("中国")) {
//										String valiIp = valiList.get(i).getFxip();
//										if (NetworkUtils.pingLinux(valiIp, 4, 3)) {
//											siteInfo.setSfjw(valiList.get(i).getSfjw());
//											siteInfo.setGjmc(valiList.get(i).getGjmc());
//											siteInfo.setFxip(valiIp);
//											siteInfo.setSid(null);
//											siteInfo.setDsid(null);
//											break;
//										}
//									}
//								}
//							}
//						}
//					}
//					// 最后要判断是否relist长度是否达到7;
//					if (ip != null && !Objects.equals("", ip)) {
//						if (relist.size() >= 7) {
//							relist.remove(0); // 将最开始添加的ip信息删除
//						}
//						relist.add(ip);
//						// 再将relist放入redis中
//						redis.addValue(ip_cache, mapkey, JsonUtils.getJsonStringByObject(relist));
//					}
//				}
//			}
//			if (siteInfo.getSfjw() != 1 || exludeCompanys.contains(siteInfo.getGjmc())) {
//				deleteWzycts(siteInfo);
//			}
//			logger.info("测试---SFJW方法执行完毕后，网站状态：  {}" + siteInfo.toString());
//		} catch (Exception e) {
//			logger.error("测试 - 处理网站是否为境外异常：{}", e);
//			if (siteInfo.getSfjw() != 1 || exludeCompanys.contains(siteInfo.getGjmc())) {
//				deleteWzycts(siteInfo);
//			}
//		}
//	}
//
//	/**
//	 * 删除wzyc_ts表中，不为境外的网站推送信息
//	 *
//	 * @param websiteInfo
//	 *            网站信息
//	 */
//	private void deleteWzycts(WebsiteInfo websiteInfo) {
//		if (websiteInfo != null) {
//			ExceptionSitePush exceptionSitePush = new ExceptionSitePush();
//			exceptionSitePush.setPtid(websiteInfo.getPtid());
//			exceptionSitePush.setWzid(websiteInfo.getWzid());
//			exceptionSitePush.setYczl(5); // 境外异常
//			webSiteRecordInfoService.deleteWzycts(exceptionSitePush); // 删除异常推送表中的数据
//		}
//	}
//
//	/**
//	 * 通过传入的WebSiteStatus对象中的ip信息，判断是否为境外网站
//	 *
//	 * @param webSiteStatus
//	 * @return
//	 */
//	private WebsiteInfo valiIpSfjw(String ip, WebsiteInfo siteInfo) {
//		try {
//			// 先假设为ip地址为未知
//			siteInfo.setGjmc("未知");
//			siteInfo.setSfjw(2);
//			siteInfo.setFxip(ip);
//			if (ip != null && IpUtils.validateIP(ip) && !ip.equalsIgnoreCase("127.0.0.1")) {
//				DmbDs ip138 = dmbInfo.getIp138DmbDs(ip);
//				DmbDs ipmark = dmbInfo.getIpMarkDmbDs(ip);
//				DmbDs choice = dmbInfo.choiceDmbDs(ipmark, ip138);
//
//				if (ip138 == null || ipmark == null) {
//					siteInfo.setIpsfyz(2);
//				} else {
//					if (!StringUtils.isEmpty(ip138.getCountry()) && !StringUtils.isEmpty(ipmark.getCountry())) {
//						if (ip138.getCountry().trim().equalsIgnoreCase(ipmark.getCountry().trim())) {
//							siteInfo.setIpsfyz(1);
//						} else {
//							siteInfo.setIpsfyz(2);
//						}
//					} else {
//						siteInfo.setIpsfyz(2);
//					}
//				}
//				if (choice != null) {
//					String gjmc = choice.getCountry();
//					if (gjmc != null && !gjmc.trim().equalsIgnoreCase("") && !exludeCompanys.contains(gjmc.trim())) {
//						if (gjmc.trim().equalsIgnoreCase("中国")) {
//							siteInfo.setSfjw(0);
//							siteInfo.setGjmc(gjmc.trim());
//							siteInfo.setSid(choice.getSid());
//							siteInfo.setDsid(choice.getDsid());
//						} else {
//							siteInfo.setSfjw(1);
//							siteInfo.setGjmc(gjmc.trim());
//							siteInfo.setSid(null);
//							siteInfo.setDsid(null);
//						}
//					}
//				}
//			}
//		} catch (Exception e) {
//			logger.error("测试 - 验证ip地址是否为境外异常：{}", e);
//		}
//		return siteInfo;
//	}
//
//	//TODO
//	@Override
//	public void judgeYXZT(WebSiteStatus webSiteStatus, WebsiteInfo siteInfo) {
//		try {
//			if (siteInfo == null || webSiteStatus == null)
//				return;
//			// 运行状态的验证，运行状态：1-正常运行、2-已关闭、3-其它
//			logger.info("测试 --- 进入验证网站运行状态...网站id为:{}", siteInfo.getWzid());
//			logger.info("测试---YXZT方法开始执行时，网站状态：{}" + siteInfo.toString());
//			// siteInfo.setDryxzt(3);
//			Boolean isOpen = webSiteStatus.getIsOpen();
//			String siteKey = siteInfo.getPtid() + "_" + siteInfo.getWzid();
//			int htmlLabelNum = 0;
//			int htmlBodyLength = 0;
//			int htmlLabelDepth = 0; // 深度
//			if (isOpen != null && isOpen) {
//				List<String> htmls = webSiteStatus.getSnapshot();
//				if (htmls != null && !htmls.isEmpty() && htmls.size() != 0) {
//					for (String html : htmls) {
//						// 获取网站的body
//						String htmlBody = HttpUtil.getHtmlBody(html);
//						htmlBody = HttpUtil.clearScript(htmlBody);
//						if (htmlBody == null || Objects.equals("", htmlBody)) {
//							continue;
//						} else {
//							htmlLabelNum += HttpUtil.getHtmlLabelNum(htmlBody); // 标签个数
//							htmlBodyLength += htmlBody.length(); // 长度
//							// 获取htmlBody的深度
//							Document doc = Jsoup.parseBodyFragment(htmlBody);
//							Elements bodyEles = doc.getElementsByTag("body");
//							Element body = bodyEles.get(0);
//							Elements elements = body.children();
//							int depth = 0;
//							if (elements.size() > 0 && !elements.isEmpty()) {
//								List<Element> parents = new ArrayList<Element>();
//								parents.addAll(elements);
//								depth = 1;
//								while (!parents.isEmpty()) {
//									// 调用获取所有子标签的方法，并将子标签集合，赋值给parents
//									parents = getLabelDepth(parents);
//									depth++;
//								}
//								if (depth > htmlLabelDepth) {
//									htmlLabelDepth = depth;
//								}
//							}
//						}
//					}
//
//					// 对网页进行，标签数量，长度，深度的判断
//					if (htmlLabelNum >= html_size && htmlBodyLength > html_length && htmlLabelDepth > html_depth) {
//						siteInfo.setDryxzt(1); // 当日运行状态-运行
//					} else {
//						siteInfo.setDryxzt(2);// 已关闭
//					}
//				} else {
//					siteInfo.setDryxzt(2);
//				}
//				siteInfo.setIsopen(1);
//			} else if (isOpen != null && !isOpen) {
//				siteInfo.setDryxzt(2);
//				siteInfo.setIsopen(0);
//			} else {
//				siteInfo.setDryxzt(3);
//				siteInfo.setIsopen(null);
//			}
//			// 将网页的长度，标签数量，深度设置到WebsiteInfo对象中
//			siteInfo.setHtmlsize(htmlLabelNum);
//			siteInfo.setHtmllength(htmlBodyLength);
//			siteInfo.setHtmllabeldepth(htmlLabelDepth);
//			valiCacheYXZT(siteInfo, siteKey);// 验证运行状态(yxzt)，并将当日运行状态(dryxzt)放入redis中
//			logger.info("测试---YXZT方法执行完毕后，网站状态：  {}" + siteInfo.toString());
//		} catch (Exception e) {
//			logger.error("测试 - 验证网站运行状态异常：{}", e);
//		}
//	}
//
//	/**
//	 * 通过WebsiteInfo对象的dryxzt结合redis中缓存的前10天的运行状态， 从而判断网站的实际运行状态
//	 *
//	 * @param siteInfo
//	 * @param siteKey
//	 *            mapKey
//	 */
//	@SuppressWarnings("unchecked")
//	private void valiCacheYXZT(WebsiteInfo siteInfo, String siteKey) {
//		String value = redis.getValue(webValidateKey, siteKey);
//		List<Integer> reYxzt = null;
//		if (value == null) {
//			reYxzt = new ArrayList<Integer>();
//		} else {
//			reYxzt = (List<Integer>) JsonUtils.getObjectByJsonString(value, new TypeToken<List<Integer>>() {
//			}.getType());
//		}
//
//		Integer yxzt = siteInfo.getDryxzt();
//		siteInfo.setYxzt(yxzt);
//		reYxzt.add(yxzt);
//		if (yxzt != 1) {
//			for (int i = reYxzt.size() - 1; i >= (reYxzt.size() - (reYxzt.size() > 10 ? 10 : reYxzt.size())); i--) {
//				if (reYxzt.get(i) == 1) {
//					siteInfo.setYxzt(1);
//					break;
//				}
//			}
//		}
//		redis.addValue(webValidateKey, siteKey, JsonUtils.getJsonStringByObject(reYxzt));
//	}
//
//	/**
//	 * 通过传入的标签集合，获取集合中所有标签的子标签 并将其存入List集合中并返回
//	 *
//	 * @param parents
//	 * @return 所有标签的子标签集合
//	 */
//	private List<Element> getLabelDepth(List<Element> parents) {
//		List<Element> children = new ArrayList<Element>();
//		for (Element child : parents) {
//			if (!child.children().isEmpty()) {
//				children.addAll(child.children());
//			}
//		}
//		return children;
//	}
//
//	/**
//	 * 获取网页标签
//	 *
//	 * @param bodyEles
//	 * @param depthNum
//	 * @return
//	 */
//	@SuppressWarnings("unused")
//	@Deprecated
//	private int getLabelNum(Element element, int depthNum) {
//		if (element == null)
//			return depthNum;
//		Elements elements = element.children();
//		if (elements.size() > 0 && !elements.isEmpty()) {
//			for (Element ele : elements) {
//				depthNum = getLabelNum(ele, depthNum);
//			}
//		}
//		depthNum++;
//		return depthNum;
//	}
//
//	@Override
//	public void judgeYSFJR(WebSiteStatus webSiteStatus, WebsiteInfo siteInfo) {
//		try {
//			if (siteInfo == null || webSiteStatus == null)
//				return;
//			logger.info("测试---进入判断疑似非金融..网站id:{},{}", siteInfo.getYm(), siteInfo);
//			if(siteInfo.getYsfjr() == 4)return;
//			if (!webSiteStatus.getIsOpen()) {
//				siteInfo.setYsfjr(3);
//				return;
//			}
//			List<String> snapshot = webSiteStatus.getSnapshot();
//			if (snapshot != null && !snapshot.isEmpty()) {
//				String stringByList = CommonStringUtils.getStringByList(snapshot);
//				if (StringUtils.isEmpty(stringByList) || StringUtils.isEmpty(stringByList.trim())) {
//					siteInfo.setYsfjr(3);
//					return;
//				}
//				int includeWordsByHtml = DocumentUtil.isIncludeWordsByHtml(KeywordConfig.getInstance().getExKeywords(),
//						stringByList, siteInfo);
//				int count = DocumentUtil.calcWordCapInHtmlString(KeywordConfig.getInstance().getInKeywords(),
//						stringByList);
//				if (includeWordsByHtml == 1) {
//					siteInfo.setYsfjr(1);
//					siteInfo.setScore(count);
//					return;
//				}
//				if (count <= inwordcap) {
//					siteInfo.setYsfjr(1);
//					siteInfo.setScore(count);
//				} else {
//					siteInfo.setYsfjr(2);
//					siteInfo.setScore(count);
//				}
//			}
//		} catch (Exception e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//			logger.error("测试---判断疑似非金融报错..：{}", e);
//		}
//
//	}
//
//	@SuppressWarnings({ "unchecked", "unused" })
//	@Override
//	public void judgeSJWH(WebSiteStatus webSiteStatus, WebsiteInfo websiteInfo) {
//		try {
//			logger.info("测试--升级维护判断开始。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。");
//			if (webSiteStatus == null || websiteInfo == null)
//				return;
//			if (webSiteStatus.getSnapshot() == null || webSiteStatus.getSnapshot().isEmpty()) {
//				websiteInfo.setSfsjwh(3);
//				return;
//			}
//			if (websiteInfo.getYxzt() == 2) {
//				return;
//			}
//			String html = CommonStringUtils.getStringByList(webSiteStatus.getSnapshot());
//			Document doc = Jsoup.parse(html);
//			String metaUrl = null;
//			boolean scriptUrl = false;
//			boolean formUrl = false;
//			boolean iframe = false;
//			boolean frame = false;
//			boolean body = false;
//			Integer sfsjwh = 3;
//
//			String siteKey = websiteInfo.getPtid() + "_" + websiteInfo.getWzid();
//			Elements ele = doc.getAllElements();
//			int size = ele.size();
//			int htmllength = html.length();
//
//			websiteInfo.setHtmllength(htmllength);
//			websiteInfo.setHtmlsize(size);
//
//			if (size < 50 && htmllength < 5000) {
//				Elements head = doc.getElementsByTag("head");
//				Elements meta = doc.select("meta[http-equiv=refresh]");
//				if (meta != null && meta.size() > 0) {
//					metaUrl = meta.get(0).attr("content");
//				} else {
//					metaUrl = null;
//				}
//
//				if (metaUrl == null) {
//					if (head != null && head.size() > 0) {
//						String values = StringParseUtils.parseString(head.toString(),
//								"\\s*meta\\s*http-equiv\\s*=\\s*\\'?refresh\\'?\\s*content\\s*=\\s*\\'.+\\'", false);
//						if (values != null && !values.trim().equalsIgnoreCase("")) {
//							metaUrl = values;
//						}
//					}
//				}
//				Elements scriptEle = doc.getElementsByTag("script");
//				Elements formEle = doc.getElementsByTag("form");
//				Elements iframeEle = doc.getElementsByTag("iframe");
//				Elements frameEle = doc.getElementsByTag("frame");
//				Element bodyEle = doc.body();
//				// 判断iframe标签存在否
//				if (iframeEle != null && iframeEle.size() > 0) {
//					for (int i = 0; i < iframeEle.size(); i++) {
//						String framesrc = iframeEle.get(i).attr("src");
//						if (framesrc != null && !framesrc.trim().equals("")) {
//							iframe = true;
//							break;
//						}
//					}
//				}
//				// 判断frame标签存在否
//				if (frameEle != null && frameEle.size() > 0) {
//					for (int i = 0; i < frameEle.size(); i++) {
//						String framesrc = frameEle.get(i).attr("src");
//						if (framesrc != null && !framesrc.trim().equals("")) {
//							frame = true;
//							break;
//						}
//					}
//				}
//				/*
//				 * //判断form表单跳转存在否 if(formEle != null && formEle.size() > 0){ formUrl =
//				 * formEle.toString().contains("action"); }else{ formUrl = false; }
//				 */
//				// 判断js跳转
//				if (scriptEle != null && scriptEle.size() > 0) {
//					String values = StringParseUtils.parseString(scriptEle.toString(),
//							".*\\.?location(\\.[a-z]*)?\\s*=.*", false);
//					if ((values != null && !values.trim().equalsIgnoreCase(""))
//							|| scriptEle.toString().contains("window.onload")) {
//						scriptUrl = true;
//					} else {
//						scriptUrl = (scriptEle.toString().contains("XMLHttpRequest")
//								|| scriptEle.toString().contains(".submit"));
//					}
//				}
//				// 判断body跳转存在不
//				if (bodyEle != null) {
//					String bodyOnload = bodyEle.attr("onload");
//					if (bodyOnload != null && !bodyOnload.trim().equalsIgnoreCase(""))
//						body = true;
//				} else {
//					body = false;
//				}
//				// 判断meta标签跳转存在不
//				if (metaUrl != null || scriptUrl == true || formUrl == true || iframe == true || frame == true
//						|| body == true) {
//					sfsjwh = 3;
//				} else {
//					if (html != null && !html.equals("")) {
//						if (html.contains("建设中") || html.contains("维护中") || html.contains("网站维护")
//								|| html.contains("升级中") || html.contains("升级") || html.contains("维护")) {
//							sfsjwh = 1;
//						}
//					}
//				}
//
//			} else {
//				sfsjwh = 3;
//			}
//
//			String value = redis.getValue(webValidateKey2, siteKey);
//			List<Integer> results = null;
//			if (value == null) {
//				results = new ArrayList<Integer>();
//			} else {
//				results = (List<Integer>) JsonUtils.getObjectByJsonString(value, new TypeToken<List<Integer>>() {
//				}.getType());
//			}
//			results.add(sfsjwh);
//			if (results.size() >= sjwhDayNum) {
//				boolean target = validateYxzt(results, 1, sjwhDayNum);
//				boolean target1 = validateYxzt(results, 4, sjwhDayNum);
//				if (target) {
//					websiteInfo.setSfsjwh(1);
//				} else {
//
//					websiteInfo.setSfsjwh(3);
//				}
//			}
//			redis.addValue(webValidateKey2, siteKey, JsonUtils.getJsonStringByObject(results));
//		} catch (Exception e) {
//			logger.error("测试--升级维护判断出错........................................................", e);
//			websiteInfo.setSfsjwh(3);
//		}
//	}
//
//	@Override
//	public void judgeSFTZ(WebSiteStatus webSiteStatus, WebsiteInfo siteInfo) {
//		try {
//			logger.info("测试-----进入域名跳转判断...网站id为:{}", siteInfo.getWzid());
//			if (webSiteStatus == null || siteInfo == null) {
//				siteInfo.setSftz(DomainState.JUMP_UNKNOWN.getValue());
//				return;
//			}
//			Boolean isOpen = webSiteStatus.getIsOpen();
//			if (isOpen == null || !isOpen) {
//				siteInfo.setSftz(DomainState.JUMP_UNKNOWN.getValue());
//				return;
//			}
//			String url = siteInfo.getWwsywz();
//			int ptid = siteInfo.getPtid();
//			String currentUrl = webSiteStatus.getCurrentUrl();
//			Boolean isJumpOrnot = isJumpToDomain(currentUrl, url, ptid);
//			if (isJumpOrnot == null) {
//				siteInfo.setSftz(DomainState.JUMP_UNKNOWN.getValue());
//				return;
//			}
//			if (isJumpOrnot) {
//				siteInfo.setSftz(DomainState.JUMP_YES.getValue());
//			} else {
//				siteInfo.setSftz(DomainState.JUMP_NO.getValue());
//			}
//		} catch (Exception e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//			logger.error("测试-----判断域名跳转报错...：{}", e);
//		}
//
//	}
//
//	@Override
//	public void judgeSFJS(WebSiteStatus webSiteStatus, WebsiteInfo siteInfo) {
//		// TODO Auto-generated method stub
//
//	}
//
//	@Override
//	public void updateTestWebsiteInfoyxzt(WebsiteInfo info) {
//		// TODO Auto-generated method stub
//		logger.info("测试 ---- 网站状态更新前，网站的信息:..{}..", info.toString());
//		this.getStatDaoImpl().getSqlSessionTemplate().update("updateTestWebsiteInfoyxzt", info);
//	}
//
//	private Boolean isJumpToDomain(String currentUrl, String url, int ptid) {
//		logger.info("域名跳转判断-当前url 和 DBurl分别为:{}..{}", currentUrl, url);
//		if (StringUtils.isEmpty(currentUrl) || StringUtils.isEmpty(url))
//			return null;
//		String dbDomain = WriteClassifierInfoToDB.getDomainName(url);
//		String currentDomain = WriteClassifierInfoToDB.getDomainName(currentUrl);
//		if (StringUtils.isEmpty(currentDomain) || StringUtils.isEmpty(dbDomain))
//			return null;
//		List<WebsiteInfo> websiteInfoList = oprateDataService.getWebsiteInfoByPtid(ptid);
//		String dbstr = "";
//		String currentStr = "";
//		if (dbDomain.contains(".")) {
//			int index = dbDomain.indexOf(".");
//			dbstr = dbDomain.substring(0, index);
//		} else {
//			dbstr = dbDomain;
//		}
//
//		if (currentDomain.contains(".")) {
//			int index2 = currentDomain.indexOf(".");
//			currentStr = currentDomain.substring(0, index2);
//		} else {
//			currentStr = currentDomain;
//		}
//		if (currentStr.equalsIgnoreCase(dbstr)) {
//			return false;
//		} else {
//			if (websiteInfoList == null || websiteInfoList.isEmpty())
//				return null;
//			for (WebsiteInfo websiteInfo2 : websiteInfoList) {
//				String ym2 = websiteInfo2.getYm();
//				if (!StringUtils.isEmpty(ym2)) {
//					ym2 = ym2.trim();
//					if (ym2.contains(currentStr)) {
//						return false;
//					}
//				}
//			}
//			return true;
//		}
//	}
//
//	private void saveSnapshot(String snapshot, WebsiteInfo siteInfo, WebCrawlUtils webCrawlUtils) {
//		try {
//			if (snapshot == null || StringUtils.isEmpty(snapshot.trim()))
//				return;
//			String xcsywz = siteInfo.getXcsywz();
//			String domain = siteInfo.getYm();
//			String fileName = MD5Util.MD5(domain);
//			if (StringUtils.isEmpty(xcsywz)) {
//				xcsywz = snapshot_path + fileName;
//				FileUtils.writeStringToFile(new File(xcsywz), snapshot, encoding);
//				webCrawlUtils.writePictureByWebUrl(image_path, fileName + ".jpg", null);
//				siteInfo.setXcsywz(xcsywz);
//			} else {
//				File nwfile = new File(xcsywz);
//				if (!nwfile.exists()) {
//					xcsywz = snapshot_path + fileName;
//					FileUtils.writeStringToFile(new File(xcsywz), snapshot, encoding);
//					webCrawlUtils.writePictureByWebUrl(image_path, fileName + ".jpg", null);
//					siteInfo.setXcsywz(xcsywz);
//					return;
//				} else {
//					String html2 = FileUtils.readFileToString(nwfile, encoding);
//					String md5_1 = MD5Util.MD5(snapshot);
//					String md5_2 = MD5Util.MD5(html2);
//					if (!StringUtils.isEmpty(md5_1) && !StringUtils.isEmpty(md5_2)) {
//						if (md5_1.equalsIgnoreCase(md5_2))
//							return;
//						FileUtils.writeStringToFile(new File(xcsywz), snapshot, encoding);
//						webCrawlUtils.writePictureByWebUrl(image_path, fileName + ".jpg", null);
//						String historyFile = snapshot_path_history + fileName + "/"
//								+ DateUtil.getDateDayStr("yyyy-MM-dd");
//						String historyImage = image_path_history + fileName + "/"
//								+ DateUtil.getDateDayStr("yyyy-MM-dd");
//						FileUtils.writeStringToFile(new File(historyFile), html2, encoding);
//						webCrawlUtils.writePictureByWebUrl(historyImage, fileName + ".jpg", null); // 保存快照照片
//					}
//				}
//			}
//		} catch (IOException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//			logger.error("测试--快照保存报错.......{}", e);
//		}
//
//	}
//
//	public boolean validateYxzt(List<Integer> results, Integer result, int length) {
//		boolean target = true;
//		if (results != null) {
//			for (int i = results.size() - 1; i >= (results.size()
//					- (results.size() > length ? length : results.size())); i--) {
//				if (results.get(i) != result) {
//					target = false;
//					break;
//				}
//			}
//		} else {
//			target = false;
//		}
//		return target;
//	}
//
//	private void saveToWebSiteInfo(String redisKey, WebsiteInfo websiteInfo) {
//		if (websiteInfo != null) {
//			String ym = websiteInfo.getYm();
//			String value = redis.getValue(redisKey, ym);
//			IcpTarget icpTarget = (IcpTarget) JsonUtils.getObjectByJsonString(value, IcpTarget.class);
//			if (icpTarget != null) {
//				Integer countFromWebSiteRecordInfo = webSiteRecordInfoService
//						.queryCountFromWebSiteRecordInfo(websiteInfo.getWzid(), websiteInfo.getPtid());
//				logger.info("测试---备案表中数量：{}", countFromWebSiteRecordInfo);
//				if (countFromWebSiteRecordInfo == 0) {
//					WebSiteRecordInfo webSiteRecordInfo = new WebSiteRecordInfo();
//					webSiteRecordInfo.setWzid(websiteInfo.getWzid());
//					webSiteRecordInfo.setPtid(websiteInfo.getPtid());
//					webSiteRecordInfo.setYjym(icpTarget.getIcpRecode());
//					webSiteRecordInfo.setBah(icpTarget.getBaxh());
//					String ba_sheng = icpTarget.getBa_sheng();
//					Dmbs dmbs = oprateDataService.getDmbs(ba_sheng);
//					webSiteRecordInfo.setBzs(dmbs.getSid());
//					webSiteRecordInfo.setBasj(icpTarget.getScbbsj());
//					webSiteRecordInfo.setWzMc(icpTarget.getWzmc());
//					webSiteRecordInfo.setYmjh(websiteInfo.getYm()); // 域名集合?
//					webSiteRecordInfo.setIpjh(icpTarget.getIp_address_set());
//					webSiteRecordInfo.setZbdwmc(icpTarget.getZbdwmc());
//					webSiteRecordInfo.setZbdwxz(icpTarget.getZbdwxz());
//					webSiteRecordInfoService.insertToWebSiteRecordInfo(webSiteRecordInfo);
//				}
//			}
//		}
//	}
//
//	private void deleteDataWebsiteRecordInfo(WebsiteInfo websiteInfo) {
//		if (websiteInfo != null) {
//			Integer countFromWebSiteRecordInfo = webSiteRecordInfoService
//					.queryCountFromWebSiteRecordInfo(websiteInfo.getWzid(), websiteInfo.getPtid());
//			logger.info("测试 ---备案表中该删除的数据条数：{}", countFromWebSiteRecordInfo);
//			if (countFromWebSiteRecordInfo > 0) {
//				webSiteRecordInfoService.deleteFromWebSiteRecordInfo(websiteInfo.getWzid(), websiteInfo.getPtid());
//			}
//
//		}
//	}
//
//	/*
//	public void judgeYTSFBG_old(WebSiteStatus webSiteStatus, WebsiteInfo siteInfo) {
//		try {
//			if (siteInfo == null)
//				return;
//			siteInfo.setSfytbg(3); // 业态变更状态，默认设置为3 未知
//			siteInfo.setWykzxsd(0.0); // 网页快照相似度， 默认设置为0
//			// 网站业态是否变更(sfytbg)，1：未变更，2：已变更，3：未知
//			if (webSiteStatus == null)
//				return;
//			logger.info("测试-----进入业态是否变更判断...网站id为:{}", siteInfo.getWzid());
//			logger.info("测试 --- Begin...网站状态：{}.." + siteInfo.toString());
//			List<String> snapshots = webSiteStatus.getSnapshot();
//			if (snapshots != null && !snapshots.isEmpty()) {
//				StringBuffer new_sb = new StringBuffer();
//				for (String snapshot : snapshots) {
//					new_sb.append(snapshot);
//				}
//				String new_snap_temp = new_sb.toString();
//				String old_snap_temp = webSiteStatus.getLastsnapshot();
//				String new_snap = parseChinese(new_snap_temp).trim(); // 获取文本中的汉字
//				String old_snap = parseChinese(old_snap_temp).trim();
//				if (!Objects.equals(new_snap, "") && !Objects.equals(old_snap, "") && new_snap != null
//						&& old_snap != null) {
//					// 调用判断文本相似度方法，来确定文本相似度
//					double result = getSimilarity(new_snap, old_snap);
//					logger.info("测试 ---- getSimilarity()返回的double值:" + result);
//					// double值保留2位小数
//					// BigDecimal bd = new BigDecimal(result);
//					// double similarity = bd.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
//					DecimalFormat df = new DecimalFormat("#.00");
//					double similarity = Double.parseDouble(df.format(result));
//					logger.info("测试 ----- 文本的相似度为：" + similarity);
//					siteInfo.setWykzxsd(similarity);
//					// 判断文本相似度 相似度小于0.50，即50%，就设置为业态已变更
//					if (similarity < 0.4 && similarity > 0) {
//						logger.info("测试 ----- 网站id:" + siteInfo.getWzid() + ",当日网页快照中的汉字内容:" + new_snap);
//						logger.info("测试 ----- 网站id:" + siteInfo.getWzid() + ",上次网页快照中的汉字内容:" + old_snap);
//						siteInfo.setSfytbg(2);
//					} else {
//						siteInfo.setSfytbg(1);
//					}
//				}
//				// }
//			}
//			// }
//			logger.info("测试 --- End...，网站状态：{}.." + siteInfo.toString());
//		} catch (Exception e) {
//			logger.error("测试 ---网站业态是否变更异常：{}", e);
//		}
//	}*/
//
//	@Override
//	public void judgeYTSFBG(WebSiteStatus webSiteStatus, WebsiteInfo siteInfo) {
//	    	try {
//	    		if (siteInfo == null || webSiteStatus == null) return;
//	    		logger.info("测试-----进入业态是否变更判断...网站id为:{}", siteInfo.getWzid());
//				logger.info("测试 --- Begin...网站状态：{}.." + siteInfo.toString());
//	    		siteInfo.setSfytbg(3);
//	    		siteInfo.setWykzxsd(0.0);
//	    		// 先获取到昨天和今天的快照
//	    		// 昨天快照
//	    		String lastsnapshot = webSiteStatus.getLastsnapshot();
//	    		if (lastsnapshot == null || Objects.equals(lastsnapshot, "")) return;
//	    		// 今天快照
//	    		StringBuffer sb = new StringBuffer("");
//	    		List<String> snapshot = webSiteStatus.getSnapshot();
//	    		if (snapshot == null || snapshot.isEmpty()) return;
//				for (String str : snapshot) {
//					sb.append(str);
//				}
//	    		String todaysnapshot = sb.toString();
//	    		if (todaysnapshot == null || Objects.equals(todaysnapshot, "")) return;
//	    		//将snapshot转换成Document对象
//	    		Document lastDoc = Jsoup.parse(lastsnapshot);
//	    		Document todayDoc = Jsoup.parse(todaysnapshot);
//	    		// 1.比较上次和本次网页中的资源，返回相似值
//	    		double resSimilar = resourceSimilarity(lastDoc, todayDoc);
////	    		logger.info("测试 --- 网页资源相似度：" + resSimilar + "网站id：" + siteInfo.getWzid());
//	    		// 2.比较上次和本次网页中的内容，返回相似值
//	    		double contSimilar = contentSimilarity(lastDoc, todayDoc);
////	    		logger.info("测试 --- 网页内容相似度：" + contSimilar + "网站id：" + siteInfo.getWzid());
//	    		if (resSimilar == -1 || contSimilar == -1) return;
//	    		// 3.比较上次和本次网页中dom树的结构，返回相似值
//	    		double domTreeSimilar = domTreeSimilarity(lastDoc, todayDoc);
////	    		logger.info("测试 --- 网页结构相似度：" + domTreeSimilar + "网站id：" + siteInfo.getWzid());
//	    		// 根据3次返回的相似值，配置相应的权重，获得最终的网页相似度
//	    		double finalSimilar = resSimilar * 0.2 + contSimilar * 0.5 + domTreeSimilar * 0.3;
////	    		logger.info("测试 --- 最终相似度：" + finalSimilar + "网站id：" + siteInfo.getWzid());
//	    		// 将获取到的最终网页相似度保留两位小数
//	    		DecimalFormat df = new DecimalFormat("#.00");
//				double result = Double.parseDouble(df.format(finalSimilar));
//				siteInfo.setWykzxsd(result);
//	    		// 根据获得的最终相似度，来判断网站业态是否变更
//	    		if (result < 0.5) {
//					siteInfo.setSfytbg(2); // 变更
//				} else {
//					siteInfo.setSfytbg(1);
//				}
//	    		logger.info("测试 --- End...，网站状态：{}.." + siteInfo.toString());
//	    	} catch(Exception e) {
//	    		logger.error("测试 ---网站业态是否变更异常：{},{}", e, siteInfo.getWzid());
//	    	}
//	    }
//
//	////////////////////////////////////////////// ==>获取网页资源，并进行相似度比较的一系列方法
//	/**
//	 * 获取网页快照中的资源-a、img、css、js标签中的资源，（权重：30%）
//	 *
//	 * @param html
//	 * @return
//	 */
//	public Elements getTargetLable(Document doc) {
//		// Document doc = Jsoup.parse(html);
//		Elements a = doc.getElementsByTag("a");
//		Elements img = doc.getElementsByTag("img");
//		Elements script = doc.getElementsByTag("script");
//		Elements link = doc.getElementsByTag("link");
//		a.addAll(img);
//		a.addAll(script);
//		a.addAll(link);
//		return a;
//	}
//
//	/**
//	 * 获取网页快照中的 资源
//	 *
//	 * @param eles
//	 * @return
//	 */
//	public List<String> getAttrValue(Elements eles) {
//		List<String> list = new ArrayList<String>();
//		if (eles.hasAttr("href")) {
//			List<String> href = htmlPattern(eles.toString(), "href");
//			list.addAll(href);
//		}
//		if (eles.hasAttr("src")) {
//			List<String> src = htmlPattern(eles.toString(), "src");
//			list.addAll(src);
//		}
//		return list;
//	}
//
//	/**
//	 * 通过传入的属性名，匹配html快照中相应的属性与属性值
//	 *
//	 * @param html
//	 * @return 将匹配到的结果，放入list集合中返回
//	 */
//	public List<String> htmlPattern(String html, String pattern) {
//		String regex = "(" + pattern + ")=(\\\"|\\')(.*?)(\\\"|\\')";
//		Pattern p = Pattern.compile(regex);
//		Matcher matcher = p.matcher(html);
//		List<String> list = new ArrayList<String>();
//		while (matcher.find()) {
//			String group = matcher.group();
//			list.add(group);
//		}
//		return list;
//	}
//
//	/**
//	 * 匹配两个快照中的【资源】的相似度（权重：20%）
//	 *
//	 * @param list1
//	 * @param list2
//	 */
//	public double getSimilarity_Resource(List<String> list1, List<String> list2) {
//		Map<String, int[]> vectorMap = new HashMap<String, int[]>();
//
//		int[] tempArray = null;
//
//		for (int i = 0; i < list1.size(); i++) {
//			String md51 = MD5Util.MD5(list1.get(i));
//			if (vectorMap.containsKey(md51)) {
//				vectorMap.get(md51)[0]++;
//			} else {
//				tempArray = new int[2];
//				tempArray[0] = 1;
//				tempArray[1] = 0;
//				vectorMap.put(md51, tempArray);
//			}
//		}
//		for (int i = 0; i < list2.size(); i++) {
//			String md52 = MD5Util.MD5(list2.get(i));
//			if (vectorMap.containsKey(md52)) {
//				vectorMap.get(md52)[1]++;
//			} else {
//				tempArray = new int[2];
//				tempArray[0] = 0;
//				tempArray[1] = 1;
//				vectorMap.put(md52, tempArray);
//			}
//		}
//
//		Iterator<String> iterator = vectorMap.keySet().iterator();
//		double sqdoc1 = 0;
//		double sqdoc2 = 0;
//		double denominator = 0;
//		while (iterator.hasNext()) {
//			int[] c = vectorMap.get(iterator.next());
//			denominator += c[0] * c[1];
//			sqdoc1 += c[0] * c[0];
//			sqdoc2 += c[1] * c[1];
//		}
//		double result = denominator / Math.sqrt(sqdoc1 * sqdoc2); // 余弦计算
//		return result;
//	}
//
//	public double resourceSimilarity(Document lastDoc, Document todayDoc) {
//		Elements lastEles = getTargetLable(lastDoc); // 昨天
//		Elements todayEles = getTargetLable(todayDoc); // 今天
//		List<String> lastList = getAttrValue(lastEles);
//		List<String> todayList = getAttrValue(todayEles);
////		logger.info("测试 --- 上次网页中的资源：{}", lastList.toString());
////		logger.info("测试 --- 本次网页中的资源：{}", todayList.toString());
//		if (lastList.isEmpty() || todayList.isEmpty()) return -1;
//		double result = getSimilarity_Resource(lastList, todayList);
//		return result;
//	}
//
//	/////////////////////////////////////////////// ==> 获取网页内容，并进行相似度比较的一系列方法
//	/**
//	 * 获取网页内容
//	 */
//	public List<String> getPageContent(Document doc) {
//		// Document doc = Jsoup.parse(html);
//		Elements bodyEles = doc.getElementsByTag("body");
//		// System.out.println(bodyEles);
//		Elements ulEles = bodyEles.select("ul");
//		List<String> list = new ArrayList<String>();
//		// System.out.println(ulEles.size());
//		int size = ulEles.size();
//
//		if (ulEles.size() > 5 && ulEles.size() <= 10) {
//			size = (int) (ulEles.size() * 0.8);
//		}
//		if (ulEles.size() > 10 && ulEles.size() <= 20) {
//			size = (int) (ulEles.size() * 0.3);
//		}
//		if (ulEles.size() > 20) {
//			size = (int) (ulEles.size() * 0.22);
//		}
//		for (int i = 0; i < size; i++) {
//			getLiText(ulEles.get(i), list, i);
//		}
//		List<String> key_desc = getKey_desc(doc);
//		list.addAll(key_desc);
//		return list;
//	}
//
//	/**
//	 * 获取每个ul中li的文本
//	 */
//	public List<String> getLiText(Element element, List<String> list, int i) {
//		Elements children = element.children();
//		for (Element ele : children) {
//			String text = ele.text();
//			list.add(text);
//		}
//		return list;
//	}
//
//	/**
//	 * 获取title,keywords，description的text的方法
//	 */
//	public List<String> getKey_desc(Document doc) {
//		Elements titles = doc.getElementsByTag("title");
//		String title = "";
//		if (titles.size() > 0) {
//			title = titles.get(0).text();
//		}
//		List<Element> metas = doc.getElementsByTag("meta");
//		String keyword = "";
//		String description = "";
//		for (Element meta : metas) {
//			if (meta.hasAttr("name")) {
//				String name = meta.attr("name");
//				name = name.toLowerCase();
//				if (name.startsWith("keyword")) {
//					keyword += (" " + meta.attr("content"));
//				} else if (name.startsWith("description")) {
//					description += (" " + meta.attr("content"));
//				}
//			}
//		}
//		List<String> list = new ArrayList<String>();
//		list.add(title);
//		list.add(keyword);
//		list.add(description);
//		return list;
//	}
//
//	/**
//	 * 计算两个String字符串的相似度，
//	 *
//	 * @param doc1
//	 * @param doc2
//	 * @return
//	 */
//	public double getSimilarity_Content(String doc1, String doc2) {
//		double result = 0;
//		if (doc1 != null && doc1.trim().length() > 0 && doc2 != null && doc2.trim().length() > 0) {
//			Map<Integer, int[]> AlgorithmMap = new HashMap<Integer, int[]>();
//			// 将两个字符串中的中文字符以及出现的总数封装到，AlgorithmMap中
//			for (int i = 0; i < doc1.length(); i++) {
//				char d1 = doc1.charAt(i);
//				int charIndex = getGB2312Id(d1);// 保存字符对应的GB2312编码
//				if (charIndex != -1) {
//					int[] fq = AlgorithmMap.get(charIndex);
//					if (fq != null && fq.length == 2) {
//						fq[0]++;// 已有该字符，加1
//					} else {
//						fq = new int[2];
//						fq[0] = 1;
//						fq[1] = 0;
//						AlgorithmMap.put(charIndex, fq);// 新增字符入map
//					}
//				}
//			}
//			for (int i = 0; i < doc2.length(); i++) {
//				char d2 = doc2.charAt(i);
//				int charIndex = getGB2312Id(d2);
//				if (charIndex != -1) {
//					int[] fq = AlgorithmMap.get(charIndex);
//					if (fq != null && fq.length == 2) {
//						fq[1]++;
//					} else {
//						fq = new int[2];
//						fq[0] = 0;
//						fq[1] = 1;
//						AlgorithmMap.put(charIndex, fq);
//					}
//				}
//			}
//
//			Iterator<Integer> iterator = AlgorithmMap.keySet().iterator();
//			double sqdoc1 = 0;
//			double sqdoc2 = 0;
//			double denominator = 0;
//			while (iterator.hasNext()) {
//				int[] c = AlgorithmMap.get(iterator.next());
//				denominator += c[0] * c[1];
//				sqdoc1 += c[0] * c[0];
//				sqdoc2 += c[1] * c[1];
//			}
//			result = denominator / Math.sqrt(sqdoc1 * sqdoc2); // 余弦计算
//			return result;
//		}
//		return result;
//	}
//
//	/**
//	 * 根据输入的Unicode字符，获取它的GB2312编码或者ascii编码，
//	 *
//	 * @param ch
//	 *            输入的GB2312中文字符或者ASCII字符(128个)
//	 * @return ch在GB2312中的位置，-1表示该字符不认识
//	 */
//	public short getGB2312Id(char ch) {
//		try {
//			byte[] buffer = Character.toString(ch).getBytes("GB2312");
//			if (buffer.length != 2) {
//				// 正常情况下buffer应该是两个字节，否则说明ch不属于GB2312编码，故返回'?'，此时说明不认识该字符
//				return -1;
//			}
//			int b0 = (int) (buffer[0] & 0x0FF) - 161; // 编码从A1开始，因此减去0xA1=161
//			int b1 = (int) (buffer[1] & 0x0FF) - 161;
//			return (short) (b0 * 94 + b1);// 第一个字符和最后一个字符没有汉字，因此每个区只收16*6-2=94个汉字
//		} catch (UnsupportedEncodingException e) {
//			e.printStackTrace();
//		}
//		return -1;
//	}
//
//	/**
//	 * 匹配字符串中所有汉字
//	 *
//	 * @param str
//	 * @return 将所有汉字拼接，最后返回
//	 */
//	public String parseChinese(String str) {
//		if (str == null) return null;
//		// 匹配单个汉字正则
//		String regex = "[\\u4E00-\\u9FA5]";
//		Pattern p = Pattern.compile(regex);
//		Matcher matcher = p.matcher(str);
//		StringBuffer sb = new StringBuffer();
//		while (matcher.find()) {
//			String tmp = matcher.group();
//			sb.append(tmp);
//		}
//		return sb.toString();
//	}
//
//	public double contentSimilarity(Document lastDoc, Document todayDoc) {
//		List<String> lastList = getPageContent(lastDoc);
//		List<String> todaylist = getPageContent(todayDoc);
//		StringBuffer last_sb = new StringBuffer();
//		StringBuffer today_sb = new StringBuffer();
//		for (String string : lastList) {
//			last_sb.append(string);
//		}
//		for (String string : todaylist) {
//			today_sb.append(string);
//		}
//		String lastContent = last_sb.toString();
//		String todayContent = today_sb.toString();
//		String lastStr = parseChinese(lastContent);
//		String todayStr = parseChinese(todayContent);
////		logger.info("测试 --- 上次网页中的内容：{}", lastStr);
////		logger.info("测试 --- 本次次网页中的内容：{}", lastStr);
//		if(lastStr.equals("") || todayStr.equals("")) return -1;
//		double similarity_Content = getSimilarity_Content(lastStr, todayStr);
//		return similarity_Content;
//	}
//
//	////////////////////////////////////////////// ==> 通过dom树结构，并进行相似度比较的一系列方法
//
//	public static int dis(Document docA, Document docB) {
//		Elements elesA = docA.getAllElements();
//		Elements elesB = docB.getAllElements();
//		int asize = elesA.size();
//		int bsize = elesB.size();
//
//		int[][] edit = new int[asize + 1][bsize + 1];
//
//		for (int i = 0; i <= asize; i++) {
//			edit[i][0] = i;
//		}
//
//		for (int j = 0; j <= bsize; j++) {
//			edit[0][j] = j;
//		}
//
//		for (int j = 1; j <= bsize; j++) {
//			for (int i = 1; i <= asize; i++) {
//				String aName = elesA.get(i - 1).tagName();
//				String bName = elesB.get(j - 1).tagName();
//				int flag = aName.equals(bName) ? 0 : 1;
//				int ins = edit[i][j - 1] + 1;
//				int del = edit[i - 1][j] + 1;
//				int rep = edit[i - 1][j - 1] + flag;
//				edit[i][j] = min(ins, del, rep);
//			}
//		}
//
//		return edit[asize][bsize];
//	}
//
//	public static int min(int ins, int del, int rep) {
//		int min = ins;
//		if (del < min)
//			min = del;
//		if (rep < min)
//			min = rep;
//		return min;
//	}
//
//	public double domTreeSimilarity(Document lastDoc, Document todayDoc) {
//		int maxSize = lastDoc.getAllElements().size() > todayDoc.getAllElements().size()
//				? lastDoc.getAllElements().size()
//				: todayDoc.getAllElements().size();
//		int dis = dis(lastDoc, todayDoc);
//		return 1.0 - (double) dis / (double) maxSize;
//	}
//
//	/*
//	 * if (file.exists()) { String[] filenames = file.list(); if (filenames.length
//	 * != 0 && filenames != null) { List<String> list = new ArrayList<String>(); //
//	 * SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); for (String
//	 * filename : filenames) { list.add(filename); } Collections.sort(list); //
//	 * 对list中的时间进行排序 String last_snapshot = list.get(list.size() - 1); // 取最新时间的文件名
//	 * File snap_file = new File(pathname + last_snapshot);
//	 * logger.info("测试 ----- 旧快照的文件路径：" + snap_file); List<String> readLines =
//	 * FileUtils.readLines(snap_file, encoding); StringBuffer last_sb = new
//	 * StringBuffer(); for (String readLine : readLines) { last_sb.append(readLine);
//	 * } String old_snap_temp = last_sb.toString(); String new_snap =
//	 * parseChinese(new_snap_temp).trim(); // 获取文本中的汉字 String old_snap =
//	 * parseChinese(old_snap_temp).trim(); if (!Objects.equals(new_snap, "") &&
//	 * !Objects.equals(old_snap, "") && new_snap != null && old_snap != null) { //
//	 * 调用判断文本相似度方法，来确定文本相似度 double result = getSimilarity(new_snap, old_snap);
//	 * logger.info("测试 ---- getSimilarity()返回的double值:" + result); // double值保留2位小数
//	 * // BigDecimal bd = new BigDecimal(result); // double similarity =
//	 * bd.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); DecimalFormat df =
//	 * new DecimalFormat("#.00"); double similarity =
//	 * Double.parseDouble(df.format(result)); logger.info("测试 ----- 文本的相似度为：" +
//	 * similarity); siteInfo.setWykzxsd(similarity); // 判断文本相似度
//	 * 相似度小于0.50，即50%，就设置为业态已变更 if (similarity < 0.4 && similarity > 0) {
//	 * logger.info("测试 ----- 网站id:" + siteInfo.getWzid() + ",当日网页快照中的汉字内容:" +
//	 * new_snap); logger.info("测试 ----- 网站id:" + siteInfo.getWzid() +
//	 * ",上次网页快照中的汉字内容:" + old_snap); siteInfo.setSfytbg(2); } else {
//	 * siteInfo.setSfytbg(1); } } } }
//	 */
//
//	/**
//	 * 根据获取到的快照，判断该快照的标签数、长度、深度是否符合要求
//	 *
//	 * @param snapshot
//	 * @return
//	 */
//	/*
//	 * private boolean valiSnapShot(String snapshot) { int htmlLabelNum = 0; int
//	 * htmlBodyLength = 0; int htmlLabelDepth = 0; // 获取网站的body String htmlBody =
//	 * HttpUtil.getHtmlBody(snapshot); htmlBody = HttpUtil.clearScript(htmlBody); if
//	 * (htmlBody == null || Objects.equals("", htmlBody)) { return false; } else {
//	 * htmlLabelNum += HttpUtil.getHtmlLabelNum(htmlBody); // 标签个数 htmlBodyLength +=
//	 * htmlBody.length(); // 长度 // 获取htmlBody的深度 Document doc =
//	 * Jsoup.parseBodyFragment(htmlBody); Elements bodyEles =
//	 * doc.getElementsByTag("body"); Element body = bodyEles.get(0); Elements
//	 * elements = body.children(); int depth = 0; if (elements.size() > 0 &&
//	 * !elements.isEmpty()) { List<Element> parents = new ArrayList<Element>();
//	 * parents.addAll(elements); depth = 1; while (!parents.isEmpty()) {
//	 * //调用获取所有子标签的方法，并将子标签集合，赋值给parents parents = getLabelDepth(parents); depth++;
//	 * } if (depth > htmlLabelDepth) { htmlLabelDepth = depth; } } //
//	 * 对网页进行，标签数量，长度，深度的判断 if (htmlLabelNum != 0 && htmlBodyLength != 0 &&
//	 * htmlLabelDepth != 0) { if (htmlLabelNum > 74 && htmlBodyLength > 5000 &&
//	 * htmlLabelDepth > 14) { return true; } else { return false; } } else { return
//	 * false; } } }
//	 */
//
//	/**
//	 * 获取上次网页快照，并将它保存在webSiteStatus对象中
//	 *
//	 * @param siteInfo
//	 */
//	private void saveLastSnapShot(WebsiteInfo siteInfo, WebSiteStatus webSiteStatus) {
//		try {
//			String xcsywz = siteInfo.getXcsywz();
//			StringBuffer last_sb = new StringBuffer("");
//			if (xcsywz != null && !Objects.equals(xcsywz, "")) {
//				File file = new File(xcsywz);
//				if (file.exists()) {
//					List<String> readLines = FileUtils.readLines(file, encoding);
//					for (String readLine : readLines) {
//						last_sb.append(readLine);
//					}
//				}
//			}
//			String lastSnapShot = last_sb.toString();
//			webSiteStatus.setLastsnapshot(lastSnapShot);
//		} catch (Exception e) {
//			logger.error("测试 ----- 保存上次快照异常：{}", e);
//		}
//	}
//
//	/**
//	 * 计算两个String字符串的相似度，
//	 *
//	 * @param doc1
//	 * @param doc2
//	 * @return
//	 */
//	/*private double getSimilarity(String doc1, String doc2) {
//		double result = 0;
//		if (doc1 != null && doc1.trim().length() > 0 && doc2 != null && doc2.trim().length() > 0) {
//			Map<Integer, int[]> AlgorithmMap = new HashMap<Integer, int[]>();
//			// 将两个字符串中的中文字符以及出现的总数封装到，AlgorithmMap中
//			for (int i = 0; i < doc1.length(); i++) {
//				char d1 = doc1.charAt(i);
//				int charIndex = getGB2312Id(d1);// 保存字符对应的GB2312编码
//				if (charIndex != -1) {
//					int[] fq = AlgorithmMap.get(charIndex);
//					if (fq != null && fq.length == 2) {
//						fq[0]++;// 已有该字符，加1
//					} else {
//						fq = new int[2];
//						fq[0] = 1;
//						fq[1] = 0;
//						AlgorithmMap.put(charIndex, fq);// 新增字符入map
//					}
//				}
//			}
//			for (int i = 0; i < doc2.length(); i++) {
//				char d2 = doc2.charAt(i);
//				int charIndex = getGB2312Id(d2);
//				if (charIndex != -1) {
//					int[] fq = AlgorithmMap.get(charIndex);
//					if (fq != null && fq.length == 2) {
//						fq[1]++;
//					} else {
//						fq = new int[2];
//						fq[0] = 0;
//						fq[1] = 1;
//						AlgorithmMap.put(charIndex, fq);
//					}
//				}
//			}
//
//			Iterator<Integer> iterator = AlgorithmMap.keySet().iterator();
//			double sqdoc1 = 0;
//			double sqdoc2 = 0;
//			double denominator = 0;
//			while (iterator.hasNext()) {
//				int[] c = AlgorithmMap.get(iterator.next());
//				denominator += c[0] * c[1];
//				sqdoc1 += c[0] * c[0];
//				sqdoc2 += c[1] * c[1];
//			}
//			result = denominator / Math.sqrt(sqdoc1 * sqdoc2); // 余弦计算
//			logger.info("测试 ----- getSimilarity()执行结束..相似度值为：" + result);
//			return result;
//		}
//		return result;
//	}*/
//
//	/*
//	 * private boolean isHanZi(char ch) { // 判断是否汉字 return (ch >= 0x4E00 && ch <=
//	 * 0x9FA5);
//	 *
//	 * if (ch >= 0x4E00 && ch <= 0x9FA5) {//汉字 return true; }else{ String str = "" +
//	 * ch; boolean isNum = str.matches("[0-9]+"); return isNum; }
//	 *
//	 *
//	 * if(Character.isLetterOrDigit(ch)){ String str = "" + ch; if
//	 * (str.matches("[0-9a-zA-Z\\u4e00-\\u9fa5]+")){//非乱码 return true; }else return
//	 * false; }else return false;
//	 *
//	 * }
//	 */
//
//	public OprateRedisService getRedis() {
//		return redis;
//	}
//
//	public void setRedis(OprateRedisService redis) {
//		this.redis = redis;
//	}
//
//	public WebSiteRecordInfoService getWebSiteRecordInfoService() {
//		return webSiteRecordInfoService;
//	}
//
//	public void setWebSiteRecordInfoService(WebSiteRecordInfoService webSiteRecordInfoService) {
//		this.webSiteRecordInfoService = webSiteRecordInfoService;
//	}
//
//	public OprateDataService getOprateDataService() {
//		return oprateDataService;
//	}
//
//	public void setOprateDataService(OprateDataService oprateDataService) {
//		this.oprateDataService = oprateDataService;
//	}
//
//	public WriteClassifierInfoToDB getDmbInfo() {
//		return dmbInfo;
//	}
//
//	public void setDmbInfo(WriteClassifierInfoToDB dmbInfo) {
//		this.dmbInfo = dmbInfo;
//	}
//
//	public static void main(String[] args) {
//		// hengxinedai.com
//		WebsiteInfo websiteInfo = new WebsiteInfo();
//		websiteInfo.setWwsywz("http://www.meihuijinfu.com");
//		websiteInfo.setYm("meihuijinfu.com");
//		WebSiteStatusServiceImpl impl = new WebSiteStatusServiceImpl();
//		WebSiteStatus webSiteStatus = impl.getWebSiteStatus(websiteInfo);
//		System.out.println(webSiteStatus.getCurrentUrl());
//		System.out.println(webSiteStatus.getSnapshot());
////		System.out.println(webSiteStatus.getInlink());
////		System.out.println(webSiteStatus.getOutlink());
//		System.out.println(webSiteStatus.getIp());
//	}
//
//	public final String reg = "[京|津|冀|晋|蒙|辽|吉|黑|沪|苏|浙|皖|闽|赣|鲁|豫|鄂|湘|粤|桂|琼|川|贵|云|渝|藏|陕|甘|青|宁|新|港|澳|台](icp备|ICP备|B2-)[0-9]\\d*(号)?";
//	@Override
//	public void judgeSFXCYBA(WebSiteStatus webSiteStatus, WebsiteInfo web) {
//		try{
//			logger.info("测试 ----- judgeSFXCYBA()执行开始。。。。。。。。" );
//			if (web == null || webSiteStatus == null) return;
//			List<String> snapshot = webSiteStatus.getSnapshot();
//			if(snapshot != null && !snapshot.isEmpty() && snapshot.size() != 0){
//				for(String ss : snapshot){
//					Pattern p = Pattern.compile(reg);
//					Matcher m  = p.matcher(ss);
//					if(m.find()){
//						String xcbah = m.group();
//						web.setXcbah(xcbah);
//						web.setSfxcba(1);
//						logger.info("网站宣称已备案，宣称备案号为：{}, 网站id为：{}", xcbah, web.getWzid());
//						return;
//					}
//				}
//				web.setSfxcba(0);
//				logger.info("未找到网站宣称备案号，网站id为：{}",web.getWzid());
//			}
//		}catch (Exception e) {
//			logger.error("测试 ----- judgeSFXCYBA()执行异常。。。。。。。。：{}", e);
//		}
//
//	}
//
//
//
//
//}
